package com.gipson.amc.utils.strprocess;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 驼峰、下划线格式字符串的相互转换方法。
 * 该方法来自cnblogs。
 *
 * @author cjw 2020-04-08
 */
public class CamelUnderlineProcess {
	
	public static final char UNDERLINE = '_';
	
	
	/**
	 * 驼峰格式字符串转换为下划线格式字符串
	 *
	 * @param param
	 * @return
	 */
	public static String camelToUnderline(String param) {
		if (param == null || "".equals(param.trim())) {
			return "";
		}
		int len = param.length();
		StringBuilder sb = new StringBuilder(len);
		for (int i = 0; i < len; i++) {
			char c = param.charAt(i);
			if (Character.isUpperCase(c)) {
				sb.append(UNDERLINE);
				sb.append(Character.toLowerCase(c));
			} else {
				sb.append(c);
			}
		}
		return sb.toString();
	}
	
	/**
	 * 下划线格式字符串转换为驼峰格式字符串
	 *
	 * @param param
	 * @return
	 */
	public static String underlineToCamel(String param) {
		if (param == null || "".equals(param.trim())) {
			return "";
		}
		int len = param.length();
		StringBuilder sb = new StringBuilder(len);
		for (int i = 0; i < len; i++) {
			char c = param.charAt(i);
			if (c == UNDERLINE) {
				if (++i < len) {
					sb.append(Character.toUpperCase(param.charAt(i)));
				}
			} else {
				sb.append(c);
			}
		}
		return sb.toString();
	}
	
	/**
	 * 下划线格式字符串转换为驼峰格式字符串2
	 *
	 * @param param
	 * @return
	 */
	public static String underlineToCamel2(String param) {
		if (param == null || "".equals(param.trim())) {
			return "";
		}
		StringBuilder sb = new StringBuilder(param);
		Matcher mc = Pattern.compile("_").matcher(param);
		int i = 0;
		while (mc.find()) {
			int position = mc.end() - (i++);
			sb.replace(position - 1, position + 1, sb.substring(position, position + 1).toUpperCase());
		}
		return sb.toString();
	}
	
	/**
	 * 将"驼峰格式字符串"(strA)转换为"下划线格式字符串"(strB),接着将strB转为大写字符串(strC)并返回strC。
	 *
	 * @param
	 * @return
	 * @author cjw 2020-06-03
	 */
	public static String camelToUnderlineWithUpperCase(String param) {
		String param2 = camelToUnderline(param).toUpperCase();
		return param2;
	}
	
	public static void main(String[] args) {
	
	}
}
